--          ╭─────────────────────────────────────────────────────────╮
--          │                     COMMENT STRINGS                     │
--          ╰─────────────────────────────────────────────────────────╯

local languages = {
  arduino = { "//%s", "/*%s*/" },
  applescript = { "#%s", "" },
  astro = { "", "<!--%s-->" },
  autohotkey = { ";%s", "/*%s*/" },
  bash = { "#%s", "" },
  beancount = { ";%s", "" },
  bib = { "%%s", "" },
  c = { "//%s", "/*%s*/" },
  cabal = { "--%s", "" },
  cmake = { "#%s", "#[[%s]]" },
  conf = { "#%s", "" },
  conkyrc = { "--%s", "--[" .. "[%s]" .. "]" },
  coq = { "(*%s*)", "" },
  cpp = { "//%s", "/*%s*/" },
  cs = { "//%s", "/*%s*/" },
  css = { "", "/*%s*/" },
  cuda = { "//%s", "/*%s*/" },
  dart = { "//%s", "/*%s*/" },
  dhall = { "--%s", "{-%s-}" },
  dosbatch = { "REM%s", "" },
  dot = { "//%s", "/*%s*/" },
  dts = { "//%s", "/*%s*/" },
  editorconfig = { "#%s", "" },
  eelixir = { "", "<!--%s-->" },
  elixir = { "#%s", "" },
  elm = { "--%s", "{-%s-}" },
  elvish = { "#%s", "" },
  faust = { "//%s", "/*%s*/" },
  fennel = { ";%s", "" },
  fish = { "#%s", "" },
  func = { ";;%s", "" },
  fsharp = { "//%s", "(*%s*)" },
  gdb = { "#%s", "" },
  gdscript = { "#%s", "" },
  gitignore = { "#%s", "" },
  gleam = { "//%s", "" },
  glsl = { "//%s", "/*%s*/" },
  gnuplot = { "#%s", "#[[%s]]" },
  go = { "//%s", "/*%s*/" },
  gomod = { "//%s", "" },
  graphql = { "#%s", "" },
  groovy = { "//%s", "/*%s*/" },
  handlebars = { "", "{{!--%s--}}" },
  haskell = { "--%s", "{-%s-}" },
  haxe = { "//%s", "/*%s*/" },
  heex = { "", "<!--%s-->" },
  html = { "", "<!--%s-->" },
  htmldjango = { "", "<!--%s-->" },
  idris = { "--%s", "{-%s-}" },
  idris2 = { "--%s", "{-%s-}" },
  ini = { "#%s", "" },
  java = { "//%s", "/*%s*/" },
  javascript = { "//%s", "/*%s*/" },
  javascriptreact = { "//%s", "/*%s*/" },
  jsonc = { "//%s", "" },
  jsonnet = { "//%s", "/*%s*/" },
  julia = { "#%s", "#=%s=#" },
  kdl = { "//%s", "/*%s*/" },
  kotlin = { "//%s", "/*%s*/" },
  lean = { "--%s", "/-%s-/" },
  lean3 = { "--%s", "/-%s-/" },
  lidris = { "--%s", "{-%s-}" },
  lilypond = { "%%s", "%{%s%}" },
  lisp = { ";;%s", "#|%s|#" },
  lua = { "--%s", "--[" .. "[%s]" .. "]" },
  luau = { "--%s", "--[" .. "[%s]" .. "]" },
  markdown = { "", "<!--%s-->" },
  make = { "#%s", "" },
  mbsyncrc = { "##%s", "" },
  mermaid = { "%%%s", "" },
  meson = { "#%s", "" },
  nextflow = { "//%s", "/*%s*/" },
  nim = { "#%s", "#[%s]#" },
  nix = { "#%s", "/*%s*/" },
  nu = { "#%s", "" },
  ocaml = { "", "(*%s*)" },
  odin = { "//%s", "/*%s*/" },
  plantuml = { "'%s", "/'%s'/" },
  purescript = { "--%s", "{-%s-}" },
  python = { "#%s", "" },
  php = { "//%s", "/*%s*/" },
  prisma = { "//%s", "" },
  proto = { "//%s", "/*%s*/" },
  quarto = { "", "<!--%s-->" },
  r = { "#%s", "" },
  racket = { ";;%s", "#|%s|#" },
  rasi = { "//%s", "/*%s*/" },
  readline = { "#%s", "" },
  rego = { "#%s", "" },
  remind = { "#%s", "" },
  rescript = { "//%s", "/*%s*/" },
  robot = { "#%s", "" },
  ron = { "//%s", "/*%s*/" },
  ruby = { "#%s", "" },
  rust = { "//%s", "/*%s*/" },
  sbt = { "//%s", "/*%s*/" },
  scala = { "//%s", "/*%s*/" },
  scheme = { ";;%s", "#|%s|#" },
  sh = { "#%s", "" },
  solidity = { "//%s", "/*%s*/" },
  supercollider = { "//%s", "/*%s*/" },
  sql = { "--%s", "/*%s*/" },
  stata = { "//%s", "/*%s*/" },
  svelte = { "", "<!--%s-->" },
  swift = { "//%s", "/*%s*/" },
  sxhkdrc = { "#%s", "" },
  tablegen = { "//%s", "/*%s*/" },
  teal = { "--%s", "--[" .. "[%s]" .. "]" },
  terraform = { "#%s", "/*%s*/" },
  tex = { "%%s", "" },
  template = { "##%s", "" },
  tmux = { "#%s", "" },
  toml = { "#%s", "" },
  twig = { "", "{#%s#}" },
  typescript = { "//%s", "/*%s*/" },
  typescriptreact = { "//%s", "/*%s*/" },
  typst = { "//%s", "/*%s*/" },
  v = { "//%s", "/*%s*/" },
  verilog = { "//%s", "" },
  vhdl = { "--%s", "" },
  vim = { '"%s', "" },
  vifm = { '"%s', "" },
  vue = { "//%s", "/*%s*/" },
  xdefaults = { "!%s", "" },
  xml = { "", "<!--%s-->" },
  xonsh = { "#%s", "" },
  yaml = { "#%s", "" },
  yuck = { ";;%s", "" },
  zig = { "//%s", "" },
  zsh = { "#%s", "" },
}
local function get_vue_comment_chars()
  local node = vim.treesitter.get_node()
  if not node then
    return { "//%", "/*%*/" } -- 默认 JS 注释
  end

  local node_type = node:type()
  local parent = node:parent()

  -- Vue 语言块检测
  if
    node_type == "element"
    and parent
    and parent:type() == "template_element"
  then
    -- <template> 块 → HTML 注释
    return { "", "<!--%s-->" }
  elseif node_type == "script_element" or node_type == "style_element" then
    -- <script> 或 <style> 块 → 检测语言
    local lang = node:field("lang")[1]
    if lang then
      lang = vim.treesitter.get_node_text(lang, 0):gsub("^['\"]|['\"]$", "")
    end

    -- 默认 JS/CSS 注释
    if node_type == "script_element" then
      return { "//%s", "/*%s*/" } -- JS/TS 注释
    else
      return { "//%s", "/*%s*/" } -- CSS 注释
    end
  else
    -- 其他情况（如 JS 表达式）→ 使用默认 commentstring
    return { "//%s", "/*%s*/" } -- CSS 注释
  end
end

---@param filetype string
---@return table
local function get_comment_strings(filetype)
  if filetype == "vue" then
    return get_vue_comment_chars()
  end
  local cs
  if filetype then
    cs = rawget(languages, filetype)
  end
  if not cs then
    return { "", "" }
  else
    return cs
  end
end

return {
  get_comment_strings = get_comment_strings,
}
